package org.example.mapper;

import org.example.entity.AccessStatistics;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 访问统计Mapper接口
 * 
 * @author Your Name
 * @since 2024-07-01
 */
@Mapper
public interface AccessStatisticsMapper {
    
    /**
     * 插入访问统计记录
     * 
     * @param accessStatistics 访问统计实体
     * @return 影响行数
     */
    int insert(AccessStatistics accessStatistics);
    
    /**
     * 根据短链接编码查询访问统计
     * 
     * @param shortCode 短链接编码
     * @return 访问统计列表
     */
    List<AccessStatistics> selectByShortCode(@Param("shortCode") String shortCode);
    
    /**
     * 根据时间范围查询访问统计
     * 
     * @param shortCode 短链接编码
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 访问统计列表
     */
    List<AccessStatistics> selectByTimeRange(@Param("shortCode") String shortCode, 
                                           @Param("startTime") LocalDateTime startTime, 
                                           @Param("endTime") LocalDateTime endTime);
    
    /**
     * 统计短链接的总访问次数
     * 
     * @param shortCode 短链接编码
     * @return 总访问次数
     */
    int countByShortCode(@Param("shortCode") String shortCode);
    
    /**
     * 统计指定时间范围内的访问次数
     * 
     * @param shortCode 短链接编码
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 访问次数
     */
    int countByTimeRange(@Param("shortCode") String shortCode, 
                        @Param("startTime") LocalDateTime startTime, 
                        @Param("endTime") LocalDateTime endTime);
    
    /**
     * 批量插入访问统计记录
     * 
     * @param accessStatisticsList 访问统计列表
     * @return 影响行数
     */
    int batchInsert(@Param("list") List<AccessStatistics> accessStatisticsList);
    
    /**
     * 删除过期数据
     * 
     * @param expireTime 过期时间
     * @return 影响行数
     */
    int deleteExpiredData(@Param("expireTime") LocalDateTime expireTime);
}
